home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
et
/
et3_0-a1.lha
/
et3
/
src
/
TreeView.h
< prev
next >
Wrap
C/C++ Source or Header
|
1992-07-17
|
4KB
|
178 lines
#ifndef TreeView_First
#ifdef __GNUG__
//pragma once
#pragma interface
#endif
#define TreeView_First
#include "CompVObject.h"
#include "DialogView.h"
class TreeNode;
enum TreeLayout {
eTLIndented,
eTLTopDown,
eTLLeftRight,
eTLNew
};
enum TreeConnection {
eTCNone,
eTCDiagonal,
eTCPerpendicular,
eTCDiagonal2
};
//---- TreeView ----------------------------------------------------------------
class TreeView: public DialogView {
public:
MetaDef(TreeView);
TreeView(EvtHandler*, TreeLayout lt= eTLLeftRight,
TreeConnection ct= eTCPerpendicular);
VObject *DoCreateDialog();
void SetTree(TreeNode*, bool freeold= TRUE);
void SetExtent(Point e);
void Promote(TreeNode*);
virtual void Collapse(TreeNode*);
virtual void OpenTreeNode(TreeNode*, bool);
VObject *FindNode(VObject *);
TreeNode *GetTree()
{ return tree; }
//---- layout
void SetLayout(TreeLayout);
TreeLayout GetLayout()
{ return layout; }
void SetConnType(TreeConnection);
//---- event handling
Command *DispatchEvents(Point lp, Token &t, Clipper*);
virtual Command *NodeSelected(VObject*, int cl);
virtual Command *GetNodeSelector(TreeNode *tn, int cl);
//---- input/output
OStream& PrintOn(OStream&);
IStream& ReadFrom(IStream&);
void Export(OStream&);
//---- hooks for BuildTree
void InstallTree(Object *root);
VObject *BuildTree(Object *root);
virtual VObject *NodeAsVObject(Object *);
virtual Iterator *MakeChildrenIter(Object *);
virtual TreeNode *MakeTreeNode(int id, SeqCollection *items);
//---- selection
virtual void SetSelection(VObject *gp);
VObject *GetSelection()
{ return selection; }
public:
Point gap;
TreeLayout layout;
TreeConnection connType;
TreeNode *tree, *oldtree;
VObject *selection;
};
struct line {
Point d;
line *link;
line(Point dd, line *l)
{ d= dd; link= l; }
void draw(Point pos);
};
struct polygon {
struct {
line *head, *tail;
} lower, upper;
polygon()
{ lower.head= lower.tail= upper.head= upper.tail= 0; }
int merge(polygon *c2);
void draw(int h, Point pos);
Point bbox(int h);
int loffset();
};
//---- TreeNode ------------------------------------------------------------------
enum TreeNodeFlags {
eTreeNodeCollapsed = BIT(eCompVObjLast+1),
eTreeNodeDefault = eCompVObjDefault,
eTreeNodeLast = eCompVObjLast+1
};
class TreeNode: public CompositeVObject {
public:
Point offset;
polygon contour;
public:
MetaDef(TreeNode);
TreeNode(int id= cIdNone, SeqCollection *cp= 0);
TreeNode(int id, ...);
TreeNode(int id, va_list ap);
TreeView *GetTreeView();
bool Collapsed()
{ return TestFlag(eTreeNodeCollapsed); }
void Open(bool);
void Collapse();
TreeConnection ConnType()
{ return GetTreeView()->connType; }
TreeLayout Layout()
{ return GetTreeView()->layout; }
Point Gap()
{ return GetTreeView()->gap; }
VObject *Detect(BoolFun f, void *arg);
VObject *FindExpandedItem(VObject*);
//---- layout
void SetOrigin(Point at);
void SetExtent(Point e);
Metric GetMinSize();
int join();
int width()
{ return At(0)->contentRect.extent.x; }
int height()
{ return At(0)->contentRect.extent.y; }
//---- drawing
void Draw(Rectangle);
void DrawConnections();
void Outline2(Point, Point);
void Highlight(HighlightState hst);
GrCursor GetCursor(Point lp);
//---- event handling
Command *DispatchEvents(Point lp, Token &t, Clipper *cl);
Command *DoMiddleButtonDownCommand(Point lp, Token t, int cl);
Command *DoLeftButtonDownCommand(Point lp, Token t, int cl);
//---- input/output
void Export(OStream &s, int level);
};
//---- TreeNodeSelector -------------------------------------------------------------
class TreeNodeSelector: public Command {
TreeNode *item;
bool inside, lastinside;
int clicks;
public:
TreeNodeSelector(TreeNode *s, int cl);
void TrackFeedback(Point, Point, bool);
Command *TrackMouse(TrackPhase, Point, Point, Point);
};
#endif